﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IBinding.cs" company="">
//   
// </copyright>
// <summary>
//   The Binding interface.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Libium.Bindings
{
    /// <summary>
    ///   The Binding interface.
    /// </summary>
    public interface IBinding
    {
        #region Public Properties

        /// <summary>
        ///   Gets the object 1.
        /// </summary>
        object Object1 { get; }

        /// <summary>
        ///   Gets the object 2.
        /// </summary>
        object Object2 { get; }

        #endregion

        #region Public Methods and Operators

        /// <summary>
        ///   The bind.
        /// </summary>
        void Bind();

        /// <summary>
        ///   The unbind.
        /// </summary>
        void Unbind();

        #endregion
    }

    /// <summary>
    /// The Binding interface.
    /// </summary>
    /// <typeparam name="T1">
    /// </typeparam>
    /// <typeparam name="T2">
    /// </typeparam>
    public interface IBinding<out T1, out T2> : IBinding
    {
        #region Public Properties

        /// <summary>
        ///   Gets the object 1.
        /// </summary>
        new T1 Object1 { get; }

        /// <summary>
        ///   Gets the object 2.
        /// </summary>
        new T2 Object2 { get; }

        #endregion
    }
}